/**
 * Vite插件，用于预处理@iconify/json的图标集数据
 * 这个文件包含两部分：
 * 1. Vite插件部分 - 只在构建时运行，使用Node.js API
 * 2. 运行时部分 - 在浏览器中运行，不依赖Node.js API
 */

// 检查是否在浏览器环境中
const isBrowser = typeof window !== 'undefined';

// 运行时导出 - 浏览器环境中使用
let collections = [];

export { collections };

// 仅在非浏览器环境中导入Node.js模块并定义插件（构建时）
let iconCollectionsPlugin;
if (!isBrowser) {
    // 使用同步导入代替异步导入
    const { readFile } = require('fs/promises');
    const { Plugin } = require('vite');
    const path = require('path');
    
    iconCollectionsPlugin = function(): Plugin {
        return {
            name: 'icon-collections',
            async resolveId(id) {
                if (id === '@iconify-collections') {
                    return id;
                }
                return null;
            },
            async load(id) {
                if (id === '@iconify-collections') {
                    try {
                        // 读取@iconify/json中的collections.json文件
                        const collectionsPath = path.resolve(
                            __dirname, '../../node_modules/@iconify/json/collections.json'
                        );
                        const content = await readFile(collectionsPath, 'utf-8');
                        const collectionsObj = JSON.parse(content);

                        // 将对象转换为数组，并为每个元素添加icons属性
                        const collections = Object.entries(collectionsObj).map(([key, value]) => ({
                            id: key,  // 保留原始键作为id
                            ...value,  // 展开原始属性
                            icons: []  // 添加空的icons数组
                        }));
                        
                        // 使用Promise.all等待所有异步操作完成
                        await Promise.all(collections.map(async (collection) => {
                            try {
                                const iconPath = path.resolve(
                                    __dirname, '../../node_modules/@iconify/json/json/' + collection.id + '.json'
                                );
                                const content = await readFile(iconPath, 'utf-8');
                                const iconsObj = JSON.parse(content);
                                const iconNames = Object.keys(iconsObj.icons);
                                collection.icons = iconNames;
                            } catch (error) {
                                console.error(`Failed to load icons for collection ${collection.id}:`, error);
                                // 出错时保留空数组
                                collection.icons = [];
                            }
                        }));
                        
                        // 返回处理后的数据
                        return `export const collections = ${JSON.stringify(collections)};`;
                    } catch (error) {
                        console.error('Failed to load icon collections:', error);
                        // 返回默认数据作为后备
                        return `export const collections = [];`;
                    }
                }
                return null;
            },
        };
    };
} else {
    // 浏览器环境中，我们定义一个空的插件函数，它不会被使用
    iconCollectionsPlugin = function() {
        return {
            name: 'icon-collections',
            // 空实现
        };
    };
}

export { iconCollectionsPlugin };